# param type
def f(pos_arg, /, dual_arg, *, kw_arg):
    print(f"{pos_arg = }")
    print(f"{dual_arg = }")
    print(f"{kw_arg = }")
f(1, "2", kw_arg=[3])
f(True, dual_arg={2}, kw_arg=(3,))

# variable param
def g(*args, **kwargs):
    print(f"{args = }")
    print(f"{kwargs = }")
g(1, "2", [3], a=(4,), b={5}, c=True)

# unpack param
def g2(a,b,c):
    print(f'{a = }, {b = }, {c = }')
g2(*[1],*(2,),**{'c':3})

# default param
def h(p="undefined"):
    print(f"{p = }")
h("public")
h()
